import app from './app.js';
import dotenv from 'dotenv';
import db from './config/db.js';
dotenv.config();

const PORT = process.env.PORT || 3000;

// 启动服务器并连接数据库
const startServer = async () => {
  try {
    // 连接数据库
    const dbConnection = await db.connectDB();
    
    // 启动HTTP服务器
    app.listen(PORT, () => {
      console.log(`后端服务器运行在 http://localhost:${PORT}`);
      console.log(`健康检查: http://localhost:${PORT}/api/health`);
      console.log(`登录接口: http://localhost:${PORT}/api/auth/login`);
      console.log(`注册接口: http://localhost:${PORT}/api/auth/register`);
      
      // 显示MySQL数据库连接信息
      if (dbConnection) {
        console.log(`数据库已连接: MySQL - ${process.env.DB_HOST || 'localhost'}:${process.env.DB_PORT || 3306}/${process.env.DB_NAME || 'front_end_ctf'}`);
      } else {
        console.log('数据库连接状态: 连接失败，请检查MySQL服务是否运行');
      }
    });
  } catch (error) {
    console.error('服务器启动失败:', error);
    process.exit(1);
  }
};

// 启动服务器
startServer();

// 处理未捕获的异常
process.on('uncaughtException', (err) => {
  console.error('未捕获的异常:', err);
  // 优雅关闭数据库连接后退出
  db.closeDB().then(() => {
    process.exit(1);
  });
});

// 处理未处理的Promise拒绝
process.on('unhandledRejection', (reason, promise) => {
  console.error('未处理的Promise拒绝:', reason);
});

// 处理程序终止信号
process.on('SIGINT', () => {
  console.log('接收到终止信号，正在关闭服务器...');
  db.closeDB().then(() => {
    process.exit(0);
  });
});

process.on('SIGTERM', () => {
  console.log('接收到终止信号，正在关闭服务器...');
  db.closeDB().then(() => {
    process.exit(0);
  });
});